﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
//#include<vector> 
using namespace std;

class Person
{
public:
	string _name;
};
class Student : virtual public Person
{
protected:
	int _num;
};
class Teacher : virtual public Person
{
protected:
	int _id;
};
class Assistant : public Student, public Teacher
{
protected:
	string _majorCourse;
};
int main()
{
	Assistant a;
	a._name = "peter";
	return 0;
}

//class Person
//{
//public:
//	string _name;
//	static int _count;
//};
//int Person::_count = 0;
//class Student : public Person
//{
//protected:
//	int _stuNum;
//};
//int main()
//{
//	Person p;
//	Student s;
//	// 这⾥的运⾏结果可以看到⾮静态成员_name的地址是不⼀样的 
//	// 说明派⽣类继承下来了，⽗派⽣类对象各有⼀份 
//	cout << &p._name << endl;
//	cout << &s._name << endl;
//	// 这⾥的运⾏结果可以看到静态成员_count的地址是⼀样的 
//	// 说明派⽣类和基类共⽤同⼀份静态成员 
//	cout << &p._count << endl;
//	cout << &s._count << endl;
//	// 公有的情况下，基类派⽣类指定类域都可以访问静态成员 
//	cout << Person::_count << endl;
//	cout << Student::_count << endl;
//	return 0;
//}

//class Base final
//{
//public:
//	void func5() { cout << "Base::func5" << endl; }
//protected:
//	int a = 1;
//private:
//	// C++98的⽅法 
//	/*Base()
//	{}*/
//};
//class Derive :public Base
//{
//	void func4() { cout << "Derive::func4" << endl; }
//protected:
//	int b = 2;
//};
//int main()
//{
//	Base b;
//	Derive d;
//	return 0;
//}
//class Base {
//public:
//    Base() { // 默认构造函数
//        cout << "Base()" << endl;
//    }
//    // 其他成员函数和构造函数...
//};
//
//class Derived : public Base {
//public:
//    Derived() // 可以不显式调用Base的默认构造函数
//    {
//        // 编译器会自动调用Base的默认构造函数
//        cout << "Derived()" << endl;
//
//    }
//
//    // 或者，为了清晰性，可以显式调用：
//    Derived(int a) : Base() {
//        cout << "Derived(int a) : Base()" << endl;
//        
//    }
//    // 其他成员函数和构造函数...
//};
//int main() {
//    Base b;
//    Derived d;
//    Derived d2(2);
//}
//class A
//{
//public:
//	void fun()
//	{
//		cout << "func()" << endl;
//	}
//};
//class B : public A
//{
//public:
//	void fun(int i)
//	{
//		cout << "func(int i)" << i << endl;
//	}
//};
//int main()
//{
//	B b;
//	b.fun(10);
//	//函数名相同构成隐藏，需指明作用域
//	//b.fun();
//	b.A::fun();
//
//	return 0;
//};

//class Person
//{
//protected:
//	string _name; 
//	string _sex;
//	int _age; 
//};
//class Student : public Person
//{
//public:
//	int _No;
//};
//int main()
//{
//	Student sobj;
//	// 1.派⽣类对象可以赋值给基类的指针/引⽤ 
//	Person* pp = &sobj;
//	Person& rp = sobj;
//	
//
//	// 派⽣类对象可以赋值给基类的对象，通过调⽤基类的拷⻉构造完成
//	Person pobj = sobj;
//
//	//2.指向派生类类型对象的基类类型的指针/引用可以通强制类型转换赋值给派生类的指针/引用
//	Student* ps = (Student*)pp;
//	//不显式强制类型转换会报错
//	//Student* ps = pp;
//
//	return 0;
//}

//namespace bit
//{
//	template<class T>
//	class stack : public std::vector<T>
//	{
//	public:
//		void push(const T& x)
//		{
//			vector<T>::push_back(x);
//		}
//		void pop()
//		{
//			vector<T>::pop_back();
//		}
//		const T& top()
//		{
//			return vector<T>::back();
//		}
//		bool empty()
//		{
//			return vector<T>::empty();
//		}
//	};
//}
//int main()
//{
//	bit::stack<int> st;
//	st.push(1);
//	st.push(2);
//	st.push(3);
//	while (!st.empty())
//	{
//		cout << st.top() << " ";
//		st.pop();
//	}
//	return 0;
//}
